import { isObj } from "../common/validator";
const defaultOptions = {
	type: "text",
	mask: false,
	message: "",
	show: true,
	zIndex: 1000,
	duration: 2000,
	position: "middle",
	forbidClick: false,
	loadingType: "circular",
	selector: "#van-toast"
};
let queue = [];
let currentOptions = Object.assign({}, defaultOptions);
function parseOptions(message) {
	return isObj(message) ? message : { message };
}
function getContext() {
	const pages = getCurrentPages();
	return pages[pages.length - 1];
}
function Toast(toastOptions) {
	const options = Object.assign(Object.assign({}, currentOptions), parseOptions(toastOptions));
	const context = (typeof options.context === "function" ? options.context() : options.context) || getContext();
	const toast = context.selectComponent(options.selector);
	if (!toast) {
		console.warn("未找到 van-toast 节点，请确认 selector 及 context 是否正确");
		return;
	}
	delete options.context;
	delete options.selector;
	toast.clear = () => {
		toast.setData({ show: false });
		if (options.onClose) {
			options.onClose();
		}
	};
	queue.push(toast);
	toast.setData(options);
	clearTimeout(toast.timer);
	if (options.duration != null && options.duration > 0) {
		toast.timer = setTimeout(() => {
			toast.clear();
			queue = queue.filter(item => item !== toast);
		}, options.duration);
	}
	return toast;
}
const createMethod = type => options => Toast(Object.assign({ type }, parseOptions(options)));
Toast.loading = createMethod("loading");
Toast.success = createMethod("success");
Toast.fail = createMethod("fail");
Toast.clear = () => {
	queue.forEach(toast => {
		toast.clear();
	});
	queue = [];
};
Toast.setDefaultOptions = options => {
	Object.assign(currentOptions, options);
};
Toast.resetDefaultOptions = () => {
	currentOptions = Object.assign({}, defaultOptions);
};
export default Toast;
